/*************************************************************************
 *                                                                       *
 * This file is part of the FreeMAPs distribution.  For full copyright   *
 * information, see COPYRIGHT and COPYING.LESSER.                        *
 *                                                                       *
 * Author:           sqbang                                              *
 * Email:            sqbang@ustc.edu                                     *
 * Date:             2016.02.13                                          *
 *                                                                       *
 *************************************************************************/

#ifndef FreeMAPs_include_COMMON_bdry_ThermalStressLoadBoundaryCondition_h
#define FreeMAPs_include_COMMON_bdry_ThermalStressLoadBoundaryCondition_h

#include "FreeMAPsConfig.h"

//COMMON headers
#include "COMMON/base/Common.h"
#include "COMMON/bdry/IrregularBoundaryConditionStrategy.h"
#include "COMMON/enum/BoundaryConditionType.h"

namespace FreeMAPs
{

//forward delcaration
class Function;

/**
 * @brief ThermalStressLoadBoundaryCondition may used in ElasticMechanicsEquationEnsemble
 * 
 */
class ThermalStressLoadBoundaryCondition : public IrregularBoundaryConditionStrategy
{
public:

    ThermalStressLoadBoundaryCondition (
        const std::string& parent_name,
        const std::string& bc_name,
        const PDEEquationEnsembleStrategy* equation_ensemble);

    ~ThermalStressLoadBoundaryCondition ();

    virtual void set_para_init_temperature(
            const std::string& para_init_temperature);

    virtual const std::string&
    get_para_init_temperature();

public:

    /**
     * @return the boundary condition type
     */
    inline BoundaryConditionType
    get_type() const;

    inline bool
    require_set_variable() const;

//    inline const Function*
//    get_para_temperature() const;

//    inline const Function*
//    get_para_init_temperature() const;


private:

    void
    clear();

    void
    get_info_for_derived_object_from_input (
        const InputDatabase* db);

    void
    get_from_input (
        const InputDatabase* db);
    
    std::string
    get_info_from_derived_object() const;


private:

    typedef IrregularBoundaryConditionStrategy Parent;

//    Function* d_para_temperature;
//    Function* d_para_init_temperature;

//    double d_para_init_temperature;
    std::string d_para_init_temperature;

private:

    DISALLOW_COPY_AND_ASSIGN (ThermalStressLoadBoundaryCondition);
};

}

#include "COMMON/bdry/ThermalStressLoadBoundaryCondition.inl"

#endif
